In packet-switched network systems a mechanism called a sliding window is used to control the flow of packets across a data link. As each packet is transmitted, an upper window edge UWE is incremented by unity. Similarly, as each packet is acknowledged, a lower window edge LWE is incremented by unity/acknowledged packet. The sending of new packets is stopped, when the difference between the UWE and LWE becomes equal to the size of the send window. Then the sending node retries to send these sent but not acknowledged packets to the same receiving node. The sending node is a packet data transmission node, which can generate packets and transfer packets other nodes have generated. If the receiving node then receives the resent packet(s) correctly, it can determine if a received packet is a valid transmitted packet or a duplicate in this simple case where only two nodes are involved. Determining is usually done by comparing the sequence number of the received packet with the sequence numbers of successfully delivered packets. Normally the sequence number is inserted into each packet by the sending node.
A problem with the current solution arises when the receiving node is “dead” for some time. In real live environments several kinds of network failures may occur or data transmitting elements may go down due to a network element failure. When that happens, the resending of packets to the same node also fails. Then the sending node reroutes the transmission and sends the packet (or packets) to another node via which it can route packets to the end system. However, it is possible that the first node received that packet (or packets) and has sent it (them) forward before the failure. The sending node does not know when the failure happened. It does not know whether the failure happened when the packet was sent first time or when the packet was received or whether only the response (acknowledgement) got lost. Therefore, duplicates are sent to the end system. The end system has to check for every packet it receives whether it is a duplicate, for example in order not to bill a customer twice. One possible way to solve this problem is not to send duplicates, but then important information may be lost.
The same problems are encountered in systems using frames, packets or any other resendable units. A frame usually comprises a protocol-related header and payload data. An empty frame is a frame with no payload data.